package com.atguigu.stgy.app.task;

import com.atguigu.stgy.app.service.LeaseAgreementService;
import com.atguigu.stgy.app.service.LeaseTermService;
import com.atguigu.stgy.model.entity.LeaseAgreement;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import jakarta.annotation.Resource;
import org.joda.time.DateTime;
import org.joda.time.LocalDateTime;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

@Component
public class StgyAppTask {
    @Resource
    LeaseAgreementService leaseAgreementService;
    //spring定时任务 cron 支持6位表达式    ， 完整的cron一共7位
    //   秒 分钟  时  日 月  周  年    最后两位使用通配符时 不能一样 可以使用一个?表示，其他使用*表示所有
    //1、每过5秒钟打印一次时间毫秒数  0/5表示 从0秒开始 每过5秒执行一次
//    @Scheduled(cron = "0/5 * * * * *") //标注的方法就是一个定时任务
//    public void test1(){
//        System.out.println(System.currentTimeMillis());
//    }

    /*
        每天凌晨 4点 查询租约表，如果有租约即将到期的 发送短信通知
        如果有租约已经到期的 修改租约的状态
     */
    @Scheduled(cron = "0 0 4 * * ?")
    public void leaseTermTask(){
       // System.out.println(System.currentTimeMillis());
        //租约到期的提前通知时间为7天
        List<LeaseAgreement> agreements = leaseAgreementService.list(Wrappers.lambdaQuery(LeaseAgreement.class)
                .le(LeaseAgreement::getLeaseEndDate, new DateTime().plusDays(7).toString("yyyy-MM-dd"))
                .in(LeaseAgreement::getStatus, 2));
        //1717516800000
        System.out.println(new DateTime(new SimpleDateFormat("yyyy-MM-dd").format(new Date())).toDate().getTime());
        //获取已过期的
        List<LeaseAgreement> expriedLeaseAgreements = agreements.stream()
                .filter(leaseAgreement -> leaseAgreement.getLeaseEndDate().getTime()
                < new DateTime(new SimpleDateFormat("yyyy-MM-dd").format(new Date())).toDate().getTime()).collect(Collectors.toList());
        //设置已过期状态
        expriedLeaseAgreements.forEach(leaseAgreement -> {
            leaseAgreement.setStatus((byte) 4);
        });
        leaseAgreementService.saveOrUpdateBatch(expriedLeaseAgreements);
        //获取即将过期的列表
        List<LeaseAgreement> leaseAgreements = agreements.stream()
                .filter(leaseAgreement -> leaseAgreement.getLeaseEndDate().getTime()
                >= new DateTime(new SimpleDateFormat("yyyy-MM-dd").format(new Date())).toDate().getTime()).collect(Collectors.toList());
        //发送短信通知
        leaseAgreements.forEach(leaseAgreement -> {
            System.out.println("即将过期的租约: "+ leaseAgreement.getPhone()+" , 房间号："+ leaseAgreement.getRoomId());
        });
    }
}
